package ar.com.equis.flexjavaintegration.arquitectura;

import org.springframework.beans.factory.annotation.Autowired;

import ar.com.equis.flexjavaintegration.service.ClienteService;
import ar.com.equis.flexjavaintegration.utilidades.ReflectonUtils;

/**
 * Provee los acceso a los servicios de usuario para toda capa de la aplicacion en el servidor
 * @author MG Systems
 *
 */
public class ServiceLocator {

	private static ServiceLocator INSTANCE;
	
	private ClienteService clienteService;
	//constructor privado
	private ServiceLocator(){
		
	}
	
	public static ServiceLocator getInstance(){
		if(INSTANCE == null){
			INSTANCE = new ServiceLocator();
		}
		return INSTANCE;
	}
	
	
	
	public static ClienteService getClienteService() {
		return INSTANCE.clienteService;
	}

	@Autowired
	public void setClienteService(ClienteService clienteService) {
		this.clienteService = clienteService;
	}

	/**
	 * Dado el nombre de un servicio retorna su instancia siempre y cuando conozca el servicio
	 * @param nombreServicio
	 * @return
	 */
	public static Object getServicioPorNombre(String nombreServicio){
		return ReflectonUtils.ejecutarGetter(nombreServicio, INSTANCE);
	}
}
